package com.kaifamiao.calendar;

import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * 1、java.util.Calendar 类是个抽象类
 * 2、Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法( get( int field ))，
 * 			   并为操作日历字段提供了一些方法( set( int field , int value ) )
 * 3、所谓的 日历字段( calendar fields ) 就是表示日期时间中某个部分的 常量，
 * 	  比如表示年份的 YEAR 、表示月份的 MONTH
 * 4、瞬间可用毫秒值来表示，它是距历元的偏移量
 * 5、历元即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000 ( 格里高利历 )
 */
public class CalendarTest1 {

	public static void main(String[] args) {
		
		// Calendar cal = new Calendar(); // Cannot instantiate the type Calendar
		
		// 通过创建非抽象子类的实例来创建一个Calendar实例
		Calendar cal = new GregorianCalendar(); // 格里高利历
		System.out.println( cal ); // 好长一坨字符串
		
		int year = cal.get( Calendar.YEAR ); // 根据 日历字段 获得相应的值
		System.out.println( year );
		
		int month = cal.get( Calendar.MONTH ) ; // 根据 日历字段 MONTH 获取月份
		month = month + 1 ;
		System.out.println( month );
		
		int date = cal.get( Calendar.DATE );
		System.out.println( date );
		
		int dayOfMonth = cal.get( Calendar.DAY_OF_MONTH );
		System.out.println( dayOfMonth );
		
		int hours = cal.get( Calendar.HOUR_OF_DAY );
		int minutes = cal.get( Calendar.MINUTE );
		int seconds = cal.get( Calendar.SECOND );
		int millis = cal.get( Calendar.MILLISECOND );
		System.out.println( hours + ":" + minutes + ":" + seconds + "." + millis );
		
		System.out.println( "- - ".repeat( 10 ) );
		
		cal.set( Calendar.YEAR ,  1999 );
		cal.set( Calendar.MONTH ,  11 ); // 注意，鬼子那边的月份是从零开始计数的
		cal.set( Calendar.DATE , 12 );
		cal.set( Calendar.HOUR ,  12 );
		
		System.out.println( cal );

	}

}
